/**
 * <copyright>
 * </copyright>
 *
 * $Id: EMetaModelPackageImpl.java,v 1.1 2008/03/31 03:50:44 zhubin Exp $
 */
package edu.pku.sei.modeler.model.core;

import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.impl.EPackageImpl;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model <b>Package</b>.
 * <!-- end-user-doc -->
 * @generated
 */
public class EMetaModelPackageImpl extends EPackageImpl implements EMetaModelPackage {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaElementEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaModelElementEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaCommentEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaNamedElementEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaPackageEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaTypedElementEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaClassifierEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaModelEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaGeneralizationEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaEnumLiteralEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaClassEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaDataTypeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaPrimitiveTypeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaEnumEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaUnlimitedNaturalEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaParameterEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaStructuralFeatureEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaOperationEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaReferenceEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaAttributeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass eMetaRelationshipEClass = null;

	/**
	 * Creates an instance of the model <b>Package</b>, registered with
	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
	 * package URI value.
	 * <p>Note: the correct way to create the package is via the static
	 * factory method {@link #init init()}, which also performs
	 * initialization of the package, or returns the registered package,
	 * if one already exists.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see org.eclipse.emf.ecore.EPackage.Registry
	 * @see edu.pku.sei.modeler.ocl.metamodel.EMetaModelPackage#eNS_URI
	 * @see #init()
	 * @generated
	 */
	private EMetaModelPackageImpl() {
		super(eNS_URI, EMetaModelFactory.eINSTANCE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private static boolean isInited = false;

	/**
	 * Creates, registers, and initializes the <b>Package</b> for this
	 * model, and for any others upon which it depends.  Simple
	 * dependencies are satisfied by calling this method on all
	 * dependent packages before doing anything else.  This method drives
	 * initialization for interdependent packages directly, in parallel
	 * with this package, itself.
	 * <p>Of this package and its interdependencies, all packages which
	 * have not yet been registered by their URI values are first created
	 * and registered.  The packages are then initialized in two steps:
	 * meta-model objects for all of the packages are created before any
	 * are initialized, since one package's meta-model objects may refer to
	 * those of another.
	 * <p>Invocation of this method will not affect any packages that have
	 * already been initialized.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #eNS_URI
	 * @see #createPackageContents()
	 * @see #initializePackageContents()
	 * @generated
	 */
	public static EMetaModelPackage init() {
		if (isInited) return (EMetaModelPackage)EPackage.Registry.INSTANCE.getEPackage(EMetaModelPackage.eNS_URI);

		// Obtain or create and register package
		EMetaModelPackageImpl theEMetaModelPackage = (EMetaModelPackageImpl)(EPackage.Registry.INSTANCE.getEPackage(eNS_URI) instanceof EMetaModelPackageImpl ? EPackage.Registry.INSTANCE.getEPackage(eNS_URI) : new EMetaModelPackageImpl());

		isInited = true;

		// Create package meta-data objects
		theEMetaModelPackage.createPackageContents();

		// Initialize created meta-data
		theEMetaModelPackage.initializePackageContents();

		// Mark meta-data to indicate it can't be changed
		theEMetaModelPackage.freeze();

		return theEMetaModelPackage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaElement() {
		return eMetaElementEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaElement_ElementID() {
		return (EAttribute)eMetaElementEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaElement_Container() {
		return (EReference)eMetaElementEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaElement_Model() {
		return (EReference)eMetaElementEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaModelElement() {
		return eMetaModelElementEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaModelElement_Comments() {
		return (EReference)eMetaModelElementEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaComment() {
		return eMetaCommentEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaComment_Body() {
		return (EAttribute)eMetaCommentEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaNamedElement() {
		return eMetaNamedElementEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaNamedElement_Name() {
		return (EAttribute)eMetaNamedElementEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaPackage() {
		return eMetaPackageEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaPackage_SubPackages() {
		return (EReference)eMetaPackageEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaPackage_NamedElements() {
		return (EReference)eMetaPackageEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaPackage_OtherElements() {
		return (EReference)eMetaPackageEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaTypedElement() {
		return eMetaTypedElementEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaTypedElement_Type() {
		return (EReference)eMetaTypedElementEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaTypedElement_LowerBound() {
		return (EAttribute)eMetaTypedElementEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaTypedElement_UpperBound() {
		return (EAttribute)eMetaTypedElementEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaTypedElement_OrderedFlag() {
		return (EAttribute)eMetaTypedElementEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaTypedElement_UniqueFlag() {
		return (EAttribute)eMetaTypedElementEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaClassifier() {
		return eMetaClassifierEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaClassifier_Generals() {
		return (EReference)eMetaClassifierEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaClassifier_LeafFlag() {
		return (EAttribute)eMetaClassifierEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaModel() {
		return eMetaModelEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaModel_Packages() {
		return (EReference)eMetaModelEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaModel_AllTypes() {
		return (EReference)eMetaModelEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaGeneralization() {
		return eMetaGeneralizationEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaGeneralization_General() {
		return (EReference)eMetaGeneralizationEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaEnumLiteral() {
		return eMetaEnumLiteralEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaEnumLiteral_Value() {
		return (EAttribute)eMetaEnumLiteralEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaClass() {
		return eMetaClassEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaClass_AbstractFlag() {
		return (EAttribute)eMetaClassEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaClass_InterfaceFlag() {
		return (EAttribute)eMetaClassEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaClass_Attributes() {
		return (EReference)eMetaClassEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaClass_References() {
		return (EReference)eMetaClassEClass.getEStructuralFeatures().get(3);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaClass_StructuralFeatures() {
		return (EReference)eMetaClassEClass.getEStructuralFeatures().get(4);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaClass_Operations() {
		return (EReference)eMetaClassEClass.getEStructuralFeatures().get(5);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaDataType() {
		return eMetaDataTypeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaDataType_SerializableFlag() {
		return (EAttribute)eMetaDataTypeEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaPrimitiveType() {
		return eMetaPrimitiveTypeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaEnum() {
		return eMetaEnumEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaEnum_EnumLiterals() {
		return (EReference)eMetaEnumEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaUnlimitedNatural() {
		return eMetaUnlimitedNaturalEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaUnlimitedNatural_Value() {
		return (EAttribute)eMetaUnlimitedNaturalEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaUnlimitedNatural_IsUnlimited() {
		return (EAttribute)eMetaUnlimitedNaturalEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaParameter() {
		return eMetaParameterEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaParameter_ContainingOperation() {
		return (EReference)eMetaParameterEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaStructuralFeature() {
		return eMetaStructuralFeatureEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaStructuralFeature_ContainingClass() {
		return (EReference)eMetaStructuralFeatureEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaStructuralFeature_ChangeableFlag() {
		return (EAttribute)eMetaStructuralFeatureEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaStructuralFeature_DerivedFlag() {
		return (EAttribute)eMetaStructuralFeatureEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaOperation() {
		return eMetaOperationEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaOperation_ContainingClass() {
		return (EReference)eMetaOperationEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaOperation_Exceptions() {
		return (EReference)eMetaOperationEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaOperation_Parameters() {
		return (EReference)eMetaOperationEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaReference() {
		return eMetaReferenceEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaReference_Opposite() {
		return (EReference)eMetaReferenceEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaReference_ContainerFlag() {
		return (EAttribute)eMetaReferenceEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaReference_ContainmentFlag() {
		return (EAttribute)eMetaReferenceEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaAttribute() {
		return eMetaAttributeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaAttribute_IDFlag() {
		return (EAttribute)eMetaAttributeEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getEMetaAttribute_InitialValue() {
		return (EAttribute)eMetaAttributeEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getEMetaRelationship() {
		return eMetaRelationshipEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaRelationship_SourceType() {
		return (EReference)eMetaRelationshipEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getEMetaRelationship_TargetType() {
		return (EReference)eMetaRelationshipEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EMetaModelFactory getEMetaModelFactory() {
		return (EMetaModelFactory)getEFactoryInstance();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isCreated = false;

	/**
	 * Creates the meta-model objects for the package.  This method is
	 * guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void createPackageContents() {
		if (isCreated) return;
		isCreated = true;

		// Create classes and their features
		eMetaElementEClass = createEClass(EMETA_ELEMENT);
		createEAttribute(eMetaElementEClass, EMETA_ELEMENT__ELEMENT_ID);
		createEReference(eMetaElementEClass, EMETA_ELEMENT__CONTAINER);
		createEReference(eMetaElementEClass, EMETA_ELEMENT__MODEL);

		eMetaModelElementEClass = createEClass(EMETA_MODEL_ELEMENT);
		createEReference(eMetaModelElementEClass, EMETA_MODEL_ELEMENT__COMMENTS);

		eMetaCommentEClass = createEClass(EMETA_COMMENT);
		createEAttribute(eMetaCommentEClass, EMETA_COMMENT__BODY);

		eMetaNamedElementEClass = createEClass(EMETA_NAMED_ELEMENT);
		createEAttribute(eMetaNamedElementEClass, EMETA_NAMED_ELEMENT__NAME);

		eMetaGeneralizationEClass = createEClass(EMETA_GENERALIZATION);
		createEReference(eMetaGeneralizationEClass, EMETA_GENERALIZATION__GENERAL);

		eMetaPackageEClass = createEClass(EMETA_PACKAGE);
		createEReference(eMetaPackageEClass, EMETA_PACKAGE__SUB_PACKAGES);
		createEReference(eMetaPackageEClass, EMETA_PACKAGE__NAMED_ELEMENTS);
		createEReference(eMetaPackageEClass, EMETA_PACKAGE__OTHER_ELEMENTS);

		eMetaTypedElementEClass = createEClass(EMETA_TYPED_ELEMENT);
		createEReference(eMetaTypedElementEClass, EMETA_TYPED_ELEMENT__TYPE);
		createEAttribute(eMetaTypedElementEClass, EMETA_TYPED_ELEMENT__LOWER_BOUND);
		createEAttribute(eMetaTypedElementEClass, EMETA_TYPED_ELEMENT__UPPER_BOUND);
		createEAttribute(eMetaTypedElementEClass, EMETA_TYPED_ELEMENT__ORDERED_FLAG);
		createEAttribute(eMetaTypedElementEClass, EMETA_TYPED_ELEMENT__UNIQUE_FLAG);

		eMetaClassifierEClass = createEClass(EMETA_CLASSIFIER);
		createEReference(eMetaClassifierEClass, EMETA_CLASSIFIER__GENERALS);
		createEAttribute(eMetaClassifierEClass, EMETA_CLASSIFIER__LEAF_FLAG);

		eMetaModelEClass = createEClass(EMETA_MODEL);
		createEReference(eMetaModelEClass, EMETA_MODEL__PACKAGES);
		createEReference(eMetaModelEClass, EMETA_MODEL__ALL_TYPES);

		eMetaEnumLiteralEClass = createEClass(EMETA_ENUM_LITERAL);
		createEAttribute(eMetaEnumLiteralEClass, EMETA_ENUM_LITERAL__VALUE);

		eMetaClassEClass = createEClass(EMETA_CLASS);
		createEAttribute(eMetaClassEClass, EMETA_CLASS__ABSTRACT_FLAG);
		createEAttribute(eMetaClassEClass, EMETA_CLASS__INTERFACE_FLAG);
		createEReference(eMetaClassEClass, EMETA_CLASS__ATTRIBUTES);
		createEReference(eMetaClassEClass, EMETA_CLASS__REFERENCES);
		createEReference(eMetaClassEClass, EMETA_CLASS__STRUCTURAL_FEATURES);
		createEReference(eMetaClassEClass, EMETA_CLASS__OPERATIONS);

		eMetaDataTypeEClass = createEClass(EMETA_DATA_TYPE);
		createEAttribute(eMetaDataTypeEClass, EMETA_DATA_TYPE__SERIALIZABLE_FLAG);

		eMetaPrimitiveTypeEClass = createEClass(EMETA_PRIMITIVE_TYPE);

		eMetaEnumEClass = createEClass(EMETA_ENUM);
		createEReference(eMetaEnumEClass, EMETA_ENUM__ENUM_LITERALS);

		eMetaUnlimitedNaturalEClass = createEClass(EMETA_UNLIMITED_NATURAL);
		createEAttribute(eMetaUnlimitedNaturalEClass, EMETA_UNLIMITED_NATURAL__VALUE);
		createEAttribute(eMetaUnlimitedNaturalEClass, EMETA_UNLIMITED_NATURAL__IS_UNLIMITED);

		eMetaParameterEClass = createEClass(EMETA_PARAMETER);
		createEReference(eMetaParameterEClass, EMETA_PARAMETER__CONTAINING_OPERATION);

		eMetaStructuralFeatureEClass = createEClass(EMETA_STRUCTURAL_FEATURE);
		createEReference(eMetaStructuralFeatureEClass, EMETA_STRUCTURAL_FEATURE__CONTAINING_CLASS);
		createEAttribute(eMetaStructuralFeatureEClass, EMETA_STRUCTURAL_FEATURE__CHANGEABLE_FLAG);
		createEAttribute(eMetaStructuralFeatureEClass, EMETA_STRUCTURAL_FEATURE__DERIVED_FLAG);

		eMetaOperationEClass = createEClass(EMETA_OPERATION);
		createEReference(eMetaOperationEClass, EMETA_OPERATION__CONTAINING_CLASS);
		createEReference(eMetaOperationEClass, EMETA_OPERATION__EXCEPTIONS);
		createEReference(eMetaOperationEClass, EMETA_OPERATION__PARAMETERS);

		eMetaReferenceEClass = createEClass(EMETA_REFERENCE);
		createEReference(eMetaReferenceEClass, EMETA_REFERENCE__OPPOSITE);
		createEAttribute(eMetaReferenceEClass, EMETA_REFERENCE__CONTAINER_FLAG);
		createEAttribute(eMetaReferenceEClass, EMETA_REFERENCE__CONTAINMENT_FLAG);

		eMetaAttributeEClass = createEClass(EMETA_ATTRIBUTE);
		createEAttribute(eMetaAttributeEClass, EMETA_ATTRIBUTE__ID_FLAG);
		createEAttribute(eMetaAttributeEClass, EMETA_ATTRIBUTE__INITIAL_VALUE);

		eMetaRelationshipEClass = createEClass(EMETA_RELATIONSHIP);
		createEReference(eMetaRelationshipEClass, EMETA_RELATIONSHIP__SOURCE_TYPE);
		createEReference(eMetaRelationshipEClass, EMETA_RELATIONSHIP__TARGET_TYPE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isInitialized = false;

	/**
	 * Complete the initialization of the package and its meta-model.  This
	 * method is guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void initializePackageContents() {
		if (isInitialized) return;
		isInitialized = true;

		// Initialize package
		setName(eNAME);
		setNsPrefix(eNS_PREFIX);
		setNsURI(eNS_URI);

		// Create type parameters

		// Set bounds for type parameters

		// Add supertypes to classes
		eMetaModelElementEClass.getESuperTypes().add(this.getEMetaElement());
		eMetaCommentEClass.getESuperTypes().add(this.getEMetaModelElement());
		eMetaNamedElementEClass.getESuperTypes().add(this.getEMetaModelElement());
		eMetaGeneralizationEClass.getESuperTypes().add(this.getEMetaModelElement());
		eMetaPackageEClass.getESuperTypes().add(this.getEMetaNamedElement());
		eMetaTypedElementEClass.getESuperTypes().add(this.getEMetaNamedElement());
		eMetaClassifierEClass.getESuperTypes().add(this.getEMetaNamedElement());
		eMetaModelEClass.getESuperTypes().add(this.getEMetaNamedElement());
		eMetaEnumLiteralEClass.getESuperTypes().add(this.getEMetaNamedElement());
		eMetaClassEClass.getESuperTypes().add(this.getEMetaClassifier());
		eMetaDataTypeEClass.getESuperTypes().add(this.getEMetaClassifier());
		eMetaPrimitiveTypeEClass.getESuperTypes().add(this.getEMetaDataType());
		eMetaEnumEClass.getESuperTypes().add(this.getEMetaDataType());
		eMetaUnlimitedNaturalEClass.getESuperTypes().add(this.getEMetaDataType());
		eMetaParameterEClass.getESuperTypes().add(this.getEMetaTypedElement());
		eMetaStructuralFeatureEClass.getESuperTypes().add(this.getEMetaTypedElement());
		eMetaOperationEClass.getESuperTypes().add(this.getEMetaTypedElement());
		eMetaReferenceEClass.getESuperTypes().add(this.getEMetaStructuralFeature());
		eMetaAttributeEClass.getESuperTypes().add(this.getEMetaStructuralFeature());
		eMetaRelationshipEClass.getESuperTypes().add(this.getEMetaClass());

		// Initialize classes and features; add operations and parameters
		initEClass(eMetaElementEClass, MetaElement.class, "EMetaElement", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getEMetaElement_ElementID(), ecorePackage.getEInt(), "elementID", "0", 0, 1, MetaElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getEMetaElement_Container(), this.getEMetaElement(), null, "container", null, 0, 1, MetaElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getEMetaElement_Model(), this.getEMetaModel(), null, "model", null, 0, 1, MetaElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eMetaModelElementEClass, MetaModelElement.class, "EMetaModelElement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getEMetaModelElement_Comments(), this.getEMetaComment(), null, "comments", null, 0, -1, MetaModelElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eMetaCommentEClass, MetaComment.class, "EMetaComment", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getEMetaComment_Body(), ecorePackage.getEString(), "body", "", 0, 1, MetaComment.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eMetaNamedElementEClass, MetaNamedElement.class, "EMetaNamedElement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getEMetaNamedElement_Name(), ecorePackage.getEString(), "name", null, 0, 1, MetaNamedElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eMetaGeneralizationEClass, MetaGeneralization.class, "EMetaGeneralization", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getEMetaGeneralization_General(), this.getEMetaClass(), null, "general", null, 0, 1, MetaGeneralization.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eMetaPackageEClass, MetaPackage.class, "EMetaPackage", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getEMetaPackage_SubPackages(), this.getEMetaPackage(), null, "subPackages", null, 0, -1, MetaPackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getEMetaPackage_NamedElements(), this.getEMetaNamedElement(), null, "namedElements", null, 0, -1, MetaPackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getEMetaPackage_OtherElements(), this.getEMetaElement(), null, "otherElements", null, 0, -1, MetaPackage.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eMetaTypedElementEClass, MetaTypedElement.class, "EMetaTypedElement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getEMetaTypedElement_Type(), this.getEMetaClassifier(), null, "type", null, 0, 1, MetaTypedElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEMetaTypedElement_LowerBound(), ecorePackage.getEInt(), "lowerBound", "0", 0, 1, MetaTypedElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEMetaTypedElement_UpperBound(), ecorePackage.getEInt(), "upperBound", null, 0, 1, MetaTypedElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEMetaTypedElement_OrderedFlag(), ecorePackage.getEBoolean(), "orderedFlag", null, 0, 1, MetaTypedElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEMetaTypedElement_UniqueFlag(), ecorePackage.getEBoolean(), "uniqueFlag", "true", 0, 1, MetaTypedElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eMetaClassifierEClass, MetaClassifier.class, "EMetaClassifier", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getEMetaClassifier_Generals(), this.getEMetaGeneralization(), null, "generals", null, 0, -1, MetaClassifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEMetaClassifier_LeafFlag(), ecorePackage.getEBoolean(), "leafFlag", null, 0, 1, MetaClassifier.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eMetaModelEClass, MetaModel.class, "EMetaModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getEMetaModel_Packages(), this.getEMetaPackage(), null, "packages", null, 0, -1, MetaModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getEMetaModel_AllTypes(), this.getEMetaClassifier(), null, "allTypes", null, 0, -1, MetaModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eMetaEnumLiteralEClass, MetaEnumLiteral.class, "EMetaEnumLiteral", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getEMetaEnumLiteral_Value(), ecorePackage.getEInt(), "value", null, 0, 1, MetaEnumLiteral.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eMetaClassEClass, MetaClass.class, "EMetaClass", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getEMetaClass_AbstractFlag(), ecorePackage.getEBoolean(), "abstractFlag", null, 0, 1, MetaClass.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEMetaClass_InterfaceFlag(), ecorePackage.getEBoolean(), "interfaceFlag", null, 0, 1, MetaClass.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getEMetaClass_Attributes(), this.getEMetaAttribute(), null, "attributes", null, 0, -1, MetaClass.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getEMetaClass_References(), this.getEMetaReference(), null, "references", null, 0, -1, MetaClass.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getEMetaClass_StructuralFeatures(), this.getEMetaStructuralFeature(), null, "structuralFeatures", null, 0, -1, MetaClass.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getEMetaClass_Operations(), this.getEMetaOperation(), null, "operations", null, 0, -1, MetaClass.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eMetaDataTypeEClass, MetaDataType.class, "EMetaDataType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getEMetaDataType_SerializableFlag(), ecorePackage.getEBoolean(), "serializableFlag", "true", 0, 1, MetaDataType.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eMetaPrimitiveTypeEClass, MetaPrimitiveType.class, "EMetaPrimitiveType", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(eMetaEnumEClass, MetaEnum.class, "EMetaEnum", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getEMetaEnum_EnumLiterals(), this.getEMetaEnumLiteral(), null, "enumLiterals", null, 0, -1, MetaEnum.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eMetaUnlimitedNaturalEClass, MetaUnlimitedNatural.class, "EMetaUnlimitedNatural", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getEMetaUnlimitedNatural_Value(), ecorePackage.getEInt(), "value", "-1", 0, 1, MetaUnlimitedNatural.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEMetaUnlimitedNatural_IsUnlimited(), ecorePackage.getEBoolean(), "isUnlimited", "true", 0, 1, MetaUnlimitedNatural.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eMetaParameterEClass, MetaParameter.class, "EMetaParameter", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getEMetaParameter_ContainingOperation(), this.getEMetaOperation(), null, "containingOperation", null, 0, 1, MetaParameter.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eMetaStructuralFeatureEClass, MetaStructuralFeature.class, "EMetaStructuralFeature", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getEMetaStructuralFeature_ContainingClass(), this.getEMetaClass(), null, "containingClass", null, 0, 1, MetaStructuralFeature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEMetaStructuralFeature_ChangeableFlag(), ecorePackage.getEBoolean(), "changeableFlag", "true", 0, 1, MetaStructuralFeature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEMetaStructuralFeature_DerivedFlag(), ecorePackage.getEBoolean(), "derivedFlag", null, 0, 1, MetaStructuralFeature.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eMetaOperationEClass, MetaOperation.class, "EMetaOperation", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getEMetaOperation_ContainingClass(), this.getEMetaClass(), null, "containingClass", null, 0, 1, MetaOperation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getEMetaOperation_Exceptions(), this.getEMetaClassifier(), null, "exceptions", null, 0, -1, MetaOperation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getEMetaOperation_Parameters(), this.getEMetaParameter(), null, "parameters", null, 0, -1, MetaOperation.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eMetaReferenceEClass, MetaReference.class, "EMetaReference", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getEMetaReference_Opposite(), this.getEMetaReference(), null, "opposite", null, 0, 1, MetaReference.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEMetaReference_ContainerFlag(), ecorePackage.getEBoolean(), "containerFlag", null, 0, 1, MetaReference.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEMetaReference_ContainmentFlag(), ecorePackage.getEBoolean(), "containmentFlag", null, 0, 1, MetaReference.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eMetaAttributeEClass, MetaAttribute.class, "EMetaAttribute", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getEMetaAttribute_IDFlag(), ecorePackage.getEBoolean(), "IDFlag", null, 0, 1, MetaAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getEMetaAttribute_InitialValue(), ecorePackage.getEString(), "InitialValue", null, 0, 1, MetaAttribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(eMetaRelationshipEClass, MetaRelationship.class, "EMetaRelationship", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getEMetaRelationship_SourceType(), this.getEMetaClass(), null, "sourceType", null, 0, 1, MetaRelationship.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getEMetaRelationship_TargetType(), this.getEMetaClass(), null, "targetType", null, 0, 1, MetaRelationship.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		// Create resource
		createResource(eNS_URI);
	}

} //EMetaModelPackageImpl
